home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / cross / devpic.lha / devpic / source / picasm / examples / morse.h < prev    next >
Text File  |  2000-02-27  |  4KB  |  234 lines

  1. ;
  2. ; morse.h
  3. ;
  4.  
  5. ;
  6. ; Macro to convert ascii strings and numbers to encoded morse code data.
  7. ; Uses macro recursion.
  8. ;
  9. morsedata macro ; opcode,arg1,arg2,...
  10.     if isstr(\2)
  11.       morse_string \1,\2,0
  12.     else
  13.       if streq("\2","")
  14.         exitm
  15.       endif
  16.       morsechar \1,\2
  17.     endif
  18.     morsedata \1,\3,\4,\5,\6,\7,\8,\9
  19.     endm
  20.  
  21. ;
  22. ; This macro converts strings to morse code.
  23. ; Called from the morsedata macro.
  24. ; Also recursive.
  25. ;
  26. morse_string macro ;string, startpos
  27.     if chrval(\2,\3) >= 0
  28.       morsechar \1,chrval(\2,\3)
  29.       morse_string \1,\2,\3+1
  30.     endif
  31.     endm
  32.  
  33. ;
  34. ; a big macro to convert one character of
  35. ; ASCII to morse code at assembly time
  36. ;
  37. ; zero bit represents a dot, and one bit represents a dash.
  38. ; the code is right-justified inside a byte, and is preceeded
  39. ; by a start bit of one (and padded with zero bits).
  40. ;
  41. morsechar macro  ; opcode,asciicode
  42.     if    (\2 == 32)
  43.       \1    0xff        ;special code for space
  44.       exitm
  45.     endif
  46.     if    (\2 == '"')
  47.       \1    1010010b    ; .-..-.
  48.       exitm
  49.     endif
  50.     if    (\2 == '(')
  51.       \1    1101101b    ; -.--.-
  52.       exitm
  53.     endif
  54.     if    (\2 == ')')
  55.       \1    1101101b    ; -.--.-
  56.       exitm
  57.     endif
  58.     if    (\2 == ',')
  59.       \1    1110011b    ; --..--
  60.       exitm
  61.     endif
  62.     if    (\2 == '-')
  63.       \1    1100001b    ; -....-
  64.       exitm
  65.     endif
  66.     if    (\2 == '.')
  67.       \1    1101010b    ; -.-.-.
  68.       exitm
  69.     endif
  70.     if    (\2 == '/')
  71.       \1    110010b        ; -..-.
  72.       exitm
  73.     endif
  74.     if    (\2 == '0')
  75.       \1    111111b        ; -----
  76.       exitm
  77.     endif
  78.     if    (\2 == '1')
  79.       \1    101111b        ; .----
  80.       exitm
  81.     endif
  82.     if    (\2 == '2')
  83.       \1    100111b        ; ..---
  84.       exitm
  85.     endif
  86.     if    (\2 == '3')
  87.       \1    100011b        ; ...--
  88.       exitm
  89.     endif
  90.     if    (\2 == '4')
  91.       \1    100001b        ; ....-
  92.       exitm
  93.     endif
  94.     if    (\2 == '5')
  95.       \1    100000b        ; .....
  96.       exitm
  97.     endif
  98.     if    (\2 == '6')
  99.       \1    110000b        ; -....
  100.       exitm
  101.     endif
  102.     if    (\2 == '7')
  103.       \1    111000b        ; --...
  104.       exitm
  105.     endif
  106.     if    (\2 == '8')
  107.       \1    111100b        ; ---..
  108.       exitm
  109.     endif
  110.     if    (\2 == '9')
  111.       \1    111110b        ; ----.
  112.       exitm
  113.     endif
  114.     if    (\2 == ':')
  115.       \1    1111000b    ; ---...
  116.       exitm
  117.     endif
  118.     if    (\2 == '=')
  119.       \1    110001b        ; -...-
  120.       exitm
  121.     endif
  122.     if    (\2 == '?')
  123.       \1    1001100b    ; ..--..
  124.       exitm
  125.     endif
  126.     if    (\2 == 'A') | (\2 == 'a')
  127.       \1    101b        ; .-
  128.       exitm
  129.     endif
  130.     if    (\2 == 'B') | (\2 == 'b')
  131.       \1    11000b        ; -...
  132.       exitm
  133.     endif
  134.     if    (\2 == 'C') | (\2 == 'c')
  135.       \1    11010b        ; -.-.
  136.       exitm
  137.     endif
  138.     if    (\2 == 'D') | (\2 == 'd')
  139.       \1    1100b        ; -..
  140.       exitm
  141.     endif
  142.     if    (\2 == 'E') | (\2 == 'e')
  143.       \1    10b        ; .
  144.       exitm
  145.     endif
  146.     if    (\2 == 'F') | (\2 == 'f')
  147.       \1    10010b        ; ..-.
  148.       exitm
  149.     endif
  150.     if    (\2 == 'G') | (\2 == 'g')
  151.       \1    1110b        ; --.
  152.       exitm
  153.     endif
  154.     if    (\2 == 'H') | (\2 == 'h')
  155.       \1    10000b        ; ....
  156.       exitm
  157.     endif
  158.     if    (\2 == 'I') | (\2 == 'i')
  159.       \1    100b        ; ..
  160.       exitm
  161.     endif
  162.     if    (\2 == 'J') | (\2 == 'j')
  163.       \1    10111b        ; .---
  164.       exitm
  165.     endif
  166.     if    (\2 == 'K') | (\2 == 'k')
  167.       \1    1101b        ; -.-
  168.       exitm
  169.     endif
  170.     if    (\2 == 'L') | (\2 == 'l')
  171.       \1    10100b        ; .-..
  172.       exitm
  173.     endif
  174.     if    (\2 == 'M') | (\2 == 'm')
  175.       \1    111b        ; --
  176.       exitm
  177.     endif
  178.     if    (\2 == 'N') | (\2 == 'n')
  179.       \1    110b        ; -.
  180.       exitm
  181.     endif
  182.     if    (\2 == 'O') | (\2 == 'o')
  183.       \1    1111b        ; ---
  184.       exitm
  185.     endif
  186.     if    (\2 == 'P') | (\2 == 'p')
  187.       \1    10110b        ; .--.
  188.       exitm
  189.     endif
  190.     if    (\2 == 'Q') | (\2 == 'q')
  191.       \1    11101b        ; --.-
  192.       exitm
  193.     endif
  194.     if    (\2 == 'R') | (\2 == 'r')
  195.       \1    1010b        ; .-.
  196.       exitm
  197.     endif
  198.     if    (\2 == 'S') | (\2 == 's')
  199.       \1    1000b        ; ...
  200.       exitm
  201.     endif
  202.     if    (\2 == 'T') | (\2 == 't')
  203.       \1    11b        ; -
  204.       exitm
  205.     endif
  206.     if    (\2 == 'U') | (\2 == 'u')
  207.       \1    1001b        ; ..-
  208.       exitm
  209.     endif
  210.     if    (\2 == 'V') | (\2 == 'v')
  211.       \1    10001b        ; ...-
  212.       exitm
  213.     endif
  214.     if    (\2 == 'W') | (\2 == 'w')
  215.       \1    1011b        ; .--
  216.       exitm
  217.     endif
  218.     if    (\2 == 'X') | (\2 == 'x')
  219.       \1    11001b        ; -..-
  220.       exitm
  221.     endif
  222.     if    (\2 == 'Y') | (\2 == 'y')
  223.       \1    11011b        ; -.--
  224.       exitm
  225.     endif
  226.     if    (\2 == 'Z') | (\2 == 'z')
  227.       \1    11100b        ; --..
  228.       exitm
  229.     endif
  230.  
  231.         ~ ;Error: Character not in morse code table!
  232.         endm    ; end of morsechar macro
  233.  
  234.